﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using supervisor_de_cajas;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

namespace supervisor_de_cajas
{
    public partial class Cajero : Form
    {
        public Cajero()
        {
            InitializeComponent();
        }
        Conexion conn = new Conexion();
        Gestion g = new Gestion();
        private void button1_Click(object sender, EventArgs e)
        {



        }
        private void listar()
        {
            try
            {
                conn.conectar();
                SqlDataAdapter da = new SqlDataAdapter("Cajero_Select", conn.conector);
                DataTable dt = new DataTable();
                da.Fill(dt);
                dgv1.DataSource = dt;
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Error en la conexion ala Base de datos.");
                string a = ex.Message;
            }
            finally
            {
                conn.desconectar();
            }
        }
        private void insertar()
        {
            string rutcompleto = txtrut.Text + txtdigito.Text;
            try
            {
                conn.conectar();
                SqlCommand cmd = new SqlCommand("Cajero_Insert", conn.conector);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@nombre", SqlDbType.VarChar, 50).Value = txtnombre.Text;
                cmd.Parameters.Add("@apellido", SqlDbType.VarChar, 50).Value = txtapellido.Text;
                cmd.Parameters.Add("@rut", SqlDbType.VarChar, 50).Value = rutcompleto;
                cmd.Parameters.Add("@pass", SqlDbType.VarChar, 50).Value = txtpass.Text;
                cmd.Parameters.Add("@estado", SqlDbType.VarChar, 50).Value = txtestado.Text;
                cmd.ExecuteNonQuery();
                MessageBox.Show("Cajero Agregado con exito.!","Éxito",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Error en la conexion ala Base de datos.");
                string a = ex.Message;
            }
            finally
            {
                conn.desconectar();
            }
        }
        private void modificar()
        {
            string rutcompleto = txtrut.Text + txtdigito.Text;
            try
            {
                /*string status = "";
                if (chkactivo.Checked == true)
                    status = "Activo";
                if (chkinactivo.Checked == true)
                    status = "Inactivo";*/
                conn.conectar();
                SqlCommand cmd = new SqlCommand("Cajero_Update", conn.conector);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@nombre", SqlDbType.VarChar, 50).Value = txtnombre.Text;
                cmd.Parameters.Add("@apellido", SqlDbType.VarChar, 50).Value = txtapellido.Text;
                cmd.Parameters.Add("@idcajero", SqlDbType.Int).Value = txtid.Text;
                cmd.Parameters.Add("@pass", SqlDbType.VarChar, 50).Value = txtpass.Text;
               // cmd.Parameters.Add("@estado", SqlDbType.VarChar, 50).Value = status;
                cmd.ExecuteNonQuery();
                MessageBox.Show("Los datos han sido actualizados.!","Éxito",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Error en la conexion ala Base de datos.");
                string a = ex.Message;
            }
            finally
            {
                conn.desconectar();
            }
        }
        private void Cajero_Load(object sender, EventArgs e)
        {
            labelsesion.Text = g.recuperarNombreSesion(login.sesion) + " " + g.recuperarApellidoSesion(login.sesion);
            btNuevo.Enabled = false;
            cbFiltro.SelectedIndex = 0;
            listar();
            timer1.Start();
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            string rutC = txtrut.Text + txtdigito.Text;
            //int rut = int.Parse(rutC);
            if (btregistrar.Text.Equals("Registrar"))
            {
                if (txtnombre.Text == "" || txtrut.Text == "" || txtapellido.Text == "" || txtpass.Text == "")
                {
                    MessageBox.Show("Debe completar todos los datos.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    if (g.ExisteCajero(rutC) == true)
                    {
                        MessageBox.Show("El rut ingresado ya existe en la base de datos", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        g.Limpiar(groupBox1);
                        txtrut.Focus();
                    }
                    else
                    {
                        if (txtrut.Text.Length < 7) { MessageBox.Show("El rut ingresado es demasiado corto.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
                        else
                        {
                            insertar();
                            g.Limpiar(groupBox1);
                        }
                    }
                }
            }
            if (btregistrar.Text.Equals("Guardar"))
            {
                if (txtid.Text == "")
                {
                    MessageBox.Show("Debe seleccionar una filas.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    if (txtrut.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[3].Value.ToString() &&
            txtid.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[0].Value.ToString() &&
            txtnombre.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[1].Value.ToString() &&
            txtapellido.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[2].Value.ToString() &&
            txtpass.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[4].Value.ToString())
                    {
                        MessageBox.Show("No se han realizado cambios.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        btregistrar.Text = "Registrar";
                        g.Limpiar(groupBox1);
                        txtdigito.Visible = true;
                        txtrut.ReadOnly = false;
                        txtrut.Focus();
                        btNuevo.Enabled = false;
                        txtid.Text = "";
                    }
                    else
                    {
                        modificar();
                        btregistrar.Text = "Registrar";
                        g.Limpiar(groupBox1);
                        txtdigito.Visible = true;
                        txtrut.ReadOnly = false;
                        txtrut.Focus();
                        btNuevo.Enabled = false;
                        txtid.Text = "";
                    }
                }
            }
            listar();
        }

        private void dgv1_Click(object sender, EventArgs e)
        {
            btNuevo.Enabled = true;
            txtdigito.Visible = false;
            txtrut.ReadOnly = true;
            txtrut.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[3].Value.ToString();
            txtid.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[0].Value.ToString();
            txtnombre.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[1].Value.ToString();
            txtapellido.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[2].Value.ToString();
            txtpass.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[4].Value.ToString();
            string estado = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[5].Value.ToString();
           /*if (estado.Equals("Activo"))
                chkactivo.Checked = true;
            else
                chkinactivo.Checked = true;*/

            btregistrar.Text = "Guardar";
            //chkactivo.Visible = true;
            //chkinactivo.Visible = true;
            //labelestado.Visible = true;
        }

        private void btNuevo_Click(object sender, EventArgs e)
        {
            btNuevo.Enabled = false;
            txtdigito.Visible = true;
            txtrut.ReadOnly = false;
            txtrut.Focus();
            g.Limpiar(groupBox1);
            btregistrar.Text = "Registrar";
            txtrut.Focus();
            /*chkactivo.Visible = false;
            chkinactivo.Visible = false;
            labelestado.Visible = false;*/
        }

        private void bteliminar_Click(object sender, EventArgs e)
        {
            if (dgv1.SelectedRows.Count == 0)
            {
                MessageBox.Show("Debe seleccionar una o varias filas.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                int reg = 0;
                int n = 0;
                for (int i = 0; i < dgv1.RowCount; i++)
                {

                    if (dgv1.Rows[i].Selected == true)
                    {
                       
                            //Codigo y mas codigo
                            int codigo;
                            int.TryParse(dgv1[0, i].Value.ToString(), out codigo);
                            g.eliminarCajero(codigo);
                            txtid.Text = "";
                            txtrut.ReadOnly = false;
                            txtdigito.Visible = true;
                            n = n + 1;
                        
                     }
                }
                /*if (n >= 1)
                {
                    MessageBox.Show("Nº de registros Eliminados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
               /* if (n == 0)
                {
                    MessageBox.Show("No se han realizado cambios.\nNº de registros Eliminados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }*/
                listar();
                g.Limpiar(groupBox1);
                btregistrar.Text = "Registrar";
                btNuevo.Enabled = false;
            }
        }

        private void button1_Click_2(object sender, EventArgs e)
        {
            if (dgv1.SelectedRows.Count == 0)
            {
                MessageBox.Show("Debe seleccionar una o varias filas.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }else{
                int reg = 0;
                int n = 0;
            for (int i = 0; i < dgv1.RowCount; i++)
            {

                if (dgv1.Rows[i].Selected == true)
                {
                   
                        //Codigo y mas codigo
                        int codigo;
                        int.TryParse(dgv1[0, i].Value.ToString(), out codigo);
                        g.ActivarCajero(codigo);
                        txtid.Text = "";
                        n = n + 1;
                    
                }
            }
           /* if (n >= 1)
            {
                MessageBox.Show("Nº de registros Activados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            /*if (n == 0)
            {
                MessageBox.Show("No se han realizado cambios.\nNº de registros Activados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }*/
            listar();
            g.Limpiar(groupBox1);
            btregistrar.Text = "Registrar";
            btNuevo.Enabled = false;
            txtrut.ReadOnly = false;
            txtdigito.Visible = true;
            }
        }

        private void cbFiltro_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbFiltro.Text == "Todos")
            {
                txtbusqueda.Enabled = false;
                listar();
            }
            else
            {
                txtbusqueda.Enabled = true;
                txtbusqueda.Text = "";
                if (cbFiltro.Text == "rut")
                {
                    txtbusqueda.MaxLength = 8;
                }
                if (cbFiltro.Text == "nombre")
                {
                    txtbusqueda.MaxLength = 40;
                }
                if (cbFiltro.Text == "apellido")
                {
                    txtbusqueda.MaxLength = 40;
                }
                if (cbFiltro.Text == "pass")
                {
                    txtbusqueda.MaxLength = 40;
                }
                if (cbFiltro.Text == "Activos")
                {
                    txtbusqueda.Enabled = false;
                    dgv1.DataSource = g.getCajerosActivos();
                    dgv1.DataMember = "Cajero";
                }
                if (cbFiltro.Text == "Inactivos")
                {
                    txtbusqueda.Enabled = false;
                    dgv1.DataSource = g.getCajerosInActivos();
                    dgv1.DataMember = "Cajero";
                }
            }
        }

        private void txtbusqueda_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (cbFiltro.Text == "rut")
            {
                if (Char.IsDigit(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                    if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso 
                    {
                        e.Handled = false;
                    }
                    else
                    {
                        //el resto de teclas pulsadas se desactivan 
                        e.Handled = true;
                    }
            }
            if (cbFiltro.Text == "nombre" || cbFiltro.Text == "apellido")
            {
                if (Char.IsLetter(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsSeparator(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            }
            if (cbFiltro.Text == "pass") { if (!char.IsLetter(e.KeyChar) && !char.IsControl(e.KeyChar) && !char.IsSeparator(e.KeyChar) && !char.IsDigit(e.KeyChar)) { e.Handled = true; } else { e.Handled = false; } }
        }

        private void txtbusqueda_TextChanged(object sender, EventArgs e)
        {
            if (cbFiltro.Text == "Todos")
            {
                listar();
            }
            else
            {
                dgv1.DataSource = g.verCajeroFiltro(" WHERE " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%'");
                dgv1.DataMember = "CAJERO";
            }
        }

        private void txtrut_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else
                if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso 
                {
                    e.Handled = false;
                }
                else
                {
                    //el resto de teclas pulsadas se desactivan 
                    e.Handled = true;
                }
        }

        private void txtrut_TextChanged(object sender, EventArgs e)
        {
            if (txtrut.Text == "")
            {
                txtdigito.Text = "";
            }
            if (txtrut.TextLength == 7 || txtrut.TextLength == 8)
            {
                int rut = Convert.ToInt32(txtrut.Text);
                string digito = g.digitoVerificador(rut);
                txtdigito.Text = digito;
            }
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void txtnombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            //IsLetter(e.KeyChar) permite cualquier caracter entre la a y la z tanto mayusculas como minusculas //IsWhiteSpace permite espacio en blanco. //'\b' permite poder eliminar caracteres con BackSpace 
            if (!char.IsLetter(e.KeyChar) && !char.IsWhiteSpace(e.KeyChar) && e.KeyChar != '\b') { e.Handled = true; }
        }

        private void txtapellido_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsLetter(e.KeyChar) && !char.IsWhiteSpace(e.KeyChar) && e.KeyChar != '\b') { e.Handled = true; }
        }

        private void txtpass_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsLetter(e.KeyChar) && !char.IsControl(e.KeyChar) && !char.IsSeparator(e.KeyChar) && !char.IsDigit(e.KeyChar)) { e.Handled = true; } else { e.Handled = false; }

        }

        private void txtnombre_Validating(object sender, CancelEventArgs e)
        {
            txtnombre.Text = Regex.Replace(txtnombre.Text.Trim(), @"\s+", " ");
        }

        private void txtrut_Validating(object sender, CancelEventArgs e)
        {
            txtrut.Text = Regex.Replace(txtrut.Text.Trim(), @"\s+", " ");
        }

        private void txtapellido_Validating(object sender, CancelEventArgs e)
        {
            txtapellido.Text = Regex.Replace(txtapellido.Text.Trim(), @"\s+", " ");
        }

        private void txtpass_Validating(object sender, CancelEventArgs e)
        {
            txtpass.Text = Regex.Replace(txtpass.Text.Trim(), @"\s+", " ");
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            reloj.Text = DateTime.Now.ToLongTimeString();
        }
    }
}